<template>
  <div>
    <div class="topRoom">
      <el-form ref="form" :model="form" label-width="120px">
        <el-form-item label="请输入ddl">
          <el-input v-model="form.ddl" type="textarea" rows="10"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="onSubmit">生成模板</el-button>
          <el-button>Cancel</el-button>
          <el-button @click="triggerPreview">预览</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div>
      <h1>
        <span>{{ this.tableName }} result</span>
        <button @click="() => exportZip(this.tableName)">一键压缩包</button>
      </h1>
      <ul>
        <li><a href="#json">json</a></li>
        <li><a href="#entity">entity</a></li>
        <li><a href="#controller">controller</a></li>
        <li><a href="#service">service</a></li>
        <li><a href="#mapper">mapper</a></li>
        <li><a href="#vue-list">vue-list</a></li>
        <li><a href="#vue-modify">vue-modify</a></li>
        <li><a href="#vue-list1">vue-list1</a></li>
        <li><a href="#vue-modify1">vue-modify1</a></li>
        <li><a href="#api">api</a></li>
        <li><a href="#水平table">水平table</a></li>
      </ul>

      <div id="json">
        <h3>
          jsjson
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(JSON.stringify(result.jsjson))"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.jsjson"></xmp>
                </pre>
      </div>

      <div id="entity">
        <h3>
          entity
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.entity)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                    <xmp v-html="result.entity"></xmp>
                </pre>
      </div>
      <div id="mapper">
        <h3>
          mapper
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.mapper)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.mapper"></xmp>
                </pre>
      </div>
      <div id="service">
        <h3>
          service
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.service)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.service"></xmp>
                </pre>
      </div>
      <div>
        <h3>
          serviceImpl
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.serviceImpl)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.serviceImpl"></xmp>
                </pre>
      </div>
      <div id="controller">
        <h3>
          controller
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.controller)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.controller"></xmp>
                </pre>
      </div>
      <div id="vue-list">
        <h3>
          vuelist
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.vuelist)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.vuelist"></xmp>
                </pre>
      </div>
      <div id="vue-modify">
        <h3>
          vuemodify
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.vuemodify)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.vuemodify"></xmp>
                </pre>
      </div>

      <div id="vue-list1">
        <h3>
          vuelist1
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.vuelist1)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.vuelist1"></xmp>
                </pre>
      </div>
      <div id="vue-modify1">
        <h3>
          vuemodify1
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.vuemodify1)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.vuemodify1"></xmp>
                </pre>
      </div>
      <div id="api">
        <h3>
          api
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.api)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.api"></xmp>
                </pre>
      </div>

        <div id="水平table">
        <h3>
          水平table
          <span
            style="padding-left: 10px; cursor: pointer"
            @click="() => copytext(result.水平table)"
            >复制</span
          >
        </h3>
        <pre style="background: #fcfaf2; padding: 10px">
                      <xmp v-html="result.水平table"></xmp>
                </pre>
      </div>

      

      <div>
        <h3>帮助</h3>
        <div>utils --Lodash --R</div>
        <pre v-html="staticHtml"></pre>
      </div>
    </div>
  </div>
</template>
<script>
import { copy2bang, createA, getUrlParamNative } from "../../utils/utils";

const staticHtml = `
package com.example.demo.utils;

public class Lodash {
    public static boolean isNil(Object str) {
        if (str == null) {
            return true;
        }
        if ("".equals(str)) {
            return true;
        }
        return false;
    }
    public static boolean isNil(Integer str) {
        if (str == null) {
            return true;
        }
        if ("".equals(str)) {
            return true;
        }
        if(str==0){
            return true;
        }
        return false;
    }
}

====

     package com.example.demo.utils;

import org.apache.http.HttpStatus;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 *
 * @author Mark sunlightcs@gmail.com
 */
public class R extends HashMap<String, Object> {
    private static final long serialVersionUID = 1L;

    public R() {
        put("code", 0);
        put("msg", "success");
    }

    public static R error() {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常，请联系管理员");
    }

    public static R error(String msg) {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
    }

    public static R error(int code, String msg) {
        R r = new R();
        r.put("code", code);
        r.put("msg", msg);
        return r;
    }

    public static R ok(String msg) {
        R r = new R();
        r.put("msg", msg);
        return r;
    }

    public static R ok(Map<String, Object> map) {
        R r = new R();
        r.putAll(map);
        return r;
    }

    public static R ok() {
        return new R();
    }

    public R put(String key, Object value) {
        super.put(key, value);
        return this;
    }
}`;
export default {
  data() {
    return {
      jquery: window.$,
      document,
      tableName: "",
      result: { entity: "" },
      form: {
        ddl: sessionStorage.getItem("form.ddl") || "",
        name: "",
        region: "",
        date1: "",
        date2: "",
        delivery: false,
        type: [],
        resource: "",
        desc: "",
      },
      staticHtml,
    };
  },
  async mounted() {
    this.tableName = getUrlParamNative("table");
    var ddl = await this.getDDLByTableName();
    this.form.ddl = ddl;
    this.onSubmit();
    document.title = "模板生成器";
  },
  methods: {
    triggerPreview() {
      createA(
        `/previewVue?tableName=${this.tableName}&ddl=${encodeURIComponent(
          this.form.ddl
        )}`
      );
    },
    exportZip(tableName) {
      createA(
        `/api/databases/exportZip?tableName=${tableName}&ddl=${encodeURIComponent(
          this.form.ddl
        )}`
      );
    },
    async getDDLByTableName() {
      var ddl = await axios
        .post("/databases/getDDLByTableName", { table: this.tableName })
        .then((res) => res.data);
      return ddl;
    },
    onSubmit() {
      sessionStorage.setItem("form.ddl", this.form.ddl);
      axios
        .post("/databases/createTemplate", { ddl: this.form.ddl })
        .then((res) => res.data)
        .then((res) => {
          this.tableName = res.tableName;
          this.$data.result.entity = res.entity;
          this.$data.result.mapper = res.mapper;
          this.$data.result.service = res.service;
          this.$data.result.serviceImpl = res.serviceImpl;
          this.$data.result.controller = res.controller;
          this.$data.result.vuelist = res.vuelist;
          this.$data.result.vuemodify = res.vuemodify;
          this.$data.result.jsjson = res.jsjson;
          this.$data.result.vuelist1 = res.vuelist1;
          this.$data.result.vuemodify1 = res.vuemodify1;
          this.$data.result.api = res.api;
           this.$data.result.水平table = res.水平table;
          
        });
    },
    copytext(str) {
      this.$message("复制成功");
      copy2bang(str);
    },
  },
};
</script>